package com.rent.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.rent.user.pojo.dto.*;
import com.rent.user.pojo.entity.User;
import com.rent.common.entity.UserVo;
import com.rent.user.pojo.vo.UserBaseInfoVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

/**
 * 用户服务接口
 * 
 * 定义用户相关的业务方法
 */
public interface UserService extends IService<User> {

    /**
     * 用户注册
     * 
     * @param registerDto 注册信息
     * @return 注册结果
     */
    // 实现：检查用户名是否已存在、密码加密、保存用户信息
    void register(RegisterDto registerDto);

    /**
     * 用户登录
     * 
     * @param loginDto 登录信息
     * @return JWT Token
     */
    // 实现：验证用户名密码、生成Token、缓存到Redis、更新登录时间
    Map<String, Object> login(LoginDto loginDto);

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return 更新结果
     */
    // 实现：更新用户信息到数据库
    boolean updateUser(User user);

    /**
     * 一键登录（短信验证码登录）
     * @param smsLoginDto 一键登录信息
     * @return 包含token和用户信息的Map
     */
    Map<String, Object> smsLogin(SmsLoginDto smsLoginDto);

    /**
     * 发送短信验证码
     * @param phone 手机号
     * @return 发送结果
     */
    boolean sendSmsCode(String phone);

    /**
     * 修改密码
     * @param updatePasswordDto 修改密码信息
     * @return 修改结果
     */
    boolean updatePassword(UpdatePasswordDto updatePasswordDto);

    /**
     * 上传头像
     * @param file 头像文件
     * @return 上传结果
     */
    String uploadAvatar(MultipartFile file);

    /**
     * 获取用户统计信息
     * 
     * @param userId 用户ID
     * @return 统计信息（我看过的、我收藏的、我的房源等）
     */
    // 实现：调用其他模块的服务获取统计数据
    UserBaseInfoVo getBaseInfo(Long userId);



    boolean updateUserRole(Long userId, Integer roleId);
}

